package com.wpzf.ndhc.controller;

import com.wpzf.common.core.utils.ServletUtils;
import com.wpzf.common.core.web.domain.AjaxResult;
import com.wpzf.common.log.annotation.Log;
import com.wpzf.common.log.enums.BusinessType;
import com.wpzf.common.security.service.TokenService;
import com.wpzf.ndhc.service.WpzfNdhcTjInfoService;
import com.wpzf.system.api.model.LoginUser;
import com.wpzf.zxhc.utils.ExcelUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/wpzfndhctj")
public class WpzfNdhcTjinfoController {

    @Autowired
    WpzfNdhcTjInfoService wpzfNdhcTjInfoServiceImpl;

    @Autowired
    TokenService tokenService;

    @Value("${tempath}")
    public String tempath;


    /*监理进度统计*/
    @Log(title = "监理进度统计", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/jljdtj", method = RequestMethod.POST)
    public AjaxResult jlJd(@RequestBody Map<String, Object> parms) {

        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.jljdtj(parms);
        if (rest != null) {
            return AjaxResult.success("统计成功", rest);
        }
        return AjaxResult.error("统计失败", -1);
    }

    /*单位进度统计*/
    @Log(title = "单位进度统计", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/dwjdtj", method = RequestMethod.POST)
    public AjaxResult dwJd(@RequestBody Map<String, Object> parms) {

        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.dwjdtj(parms);
        if (rest != null) {
            return AjaxResult.success("统计成功", rest);
        }
        return AjaxResult.error("统计失败", -1);
    }

    /*批次号获取*/
    @Log(title = "批次号获取", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/getpch", method = RequestMethod.POST)
    public AjaxResult pch(@RequestBody Map<String, Object> parms) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.pch(parms);
        if (rest != null) {
            return AjaxResult.success("获取成功", rest);
        }
        return AjaxResult.error("获取失败", -1);
    }

    /*获取区县进度列表*/
    @Log(title = "获取区县进度", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/getXzqdmProgress", method = RequestMethod.POST)
    public AjaxResult getXzqdmProgress(@RequestBody Map<String, Object> parms) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getXzqdmProgress(parms);
        Integer cnt = wpzfNdhcTjInfoServiceImpl.getXzqdmProgressCount(parms);
        if (rest != null) {
            return AjaxResult.success("获取区县进度 成功", rest, cnt);
        }
        return AjaxResult.error("获取区县进度 失败", -1);
    }

    /*获取所有批次号*/
    @Log(title = "获取所有批次号", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/getPch", method = RequestMethod.GET)
    public AjaxResult getPch(@RequestBody Map<String, Object> parms) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getPch(parms);
        if (rest != null) {
            return AjaxResult.success("获取所有批次号 成功", rest);
        }
        return AjaxResult.error("获取所有批次号 失败", -1);
    }

    /*获取所有省*/
    @Log(title = "获取所有省", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/getSheng", method = RequestMethod.POST)
    public AjaxResult getSheng(@RequestBody Map<String, Object> parms) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getSheng(parms);
        if (rest != null) {
            return AjaxResult.success("获取所有省 成功", rest);
        }
        return AjaxResult.error("获取所有省 失败", -1);
    }

    /*根据省获取所有区县*/
    @Log(title = "根据省获取所有区县", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/getXianBySheng", method = RequestMethod.POST)
    public AjaxResult getXianBySheng(@RequestBody Map<String, Object> parms) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getXianBySheng(parms);
        if (rest != null) {
            return AjaxResult.success("根据省获取所有区县 成功", rest);
        }
        return AjaxResult.error("根据省获取所有区县 失败", -1);
    }

    /*导出*/
    @Log(title = "导出", businessType = BusinessType.OTHER)
    @RequestMapping(value = "/export", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
    public AjaxResult export(@RequestBody Map<String, Object> parm, HttpServletResponse response) {
        ExcelUtils excel = new ExcelUtils();
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
        String msg = "";
        String rest = "";
        String category = parm.get("category") + "";
        List<String> Colomnlist = new ArrayList<>();
        try {
            parm.put("username", loginUser.getUsername());

            System.out.println(tempath);
            Colomnlist.clear();
            Colomnlist.add("序号");
            Colomnlist.add("省代码");
            Colomnlist.add("县代码");
            Colomnlist.add("省名称");
            Colomnlist.add("市名称");
            Colomnlist.add("县名称");
            Colomnlist.add("图斑编号");
            Colomnlist.add("监测编号");
            Colomnlist.add("月度");
            Colomnlist.add("下发时间");
            Colomnlist.add("判定类型");
            Colomnlist.add("照片合理性检查");
            Colomnlist.add("影像照片地类");
            Colomnlist.add("核查结果说明");
            Colomnlist.add("统计面积");
            Colomnlist.add("套合地块面积");
            Colomnlist.add("套合地块耕地面积");
            Colomnlist.add("套合地块占基本农田面积");
            Colomnlist.add("套合农用地面积");
            Colomnlist.add("套合地块水田面积");
            Colomnlist.add("套合生态保护红线面积");
            Colomnlist.add("填报地块面积");
            Colomnlist.add("填报地块其中耕地面积");
            Colomnlist.add("填报地块其中基本农田面积");
            Colomnlist.add("填报农用地面积");
            Colomnlist.add("填报地块水田面积");
            Colomnlist.add("填报地块生态保护红线面积");
            Colomnlist.add("合法实际用途一级名称");
            Colomnlist.add("合法实际用途二级名称");
            Colomnlist.add("合法判定依据说明");
            Colomnlist.add("违法类型一级名称");
            Colomnlist.add("违法类型二级名称");
            Colomnlist.add("违法类型三级名称");
            Colomnlist.add("违法类型四级名称");
            Colomnlist.add("违法实际用途一级名称");
            Colomnlist.add("违法实际用途二级名称");
            Colomnlist.add("违法判定依据说明");
            Colomnlist.add("处理方式");
            Colomnlist.add("立案编号");
            Colomnlist.add("整改落实情况");
            Colomnlist.add("恢复土地原貌面积");
            Colomnlist.add("复耕到位面积");
            Colomnlist.add("拆除复耕占基本农田面积");
            Colomnlist.add("拆除复耕占生态保护红线面积");
            Colomnlist.add("处罚到位情况");
            Colomnlist.add("整改落实情况");
            Colomnlist.add("移交的部门");
            Colomnlist.add("其他实际用途一级名称");
            Colomnlist.add("其他实际用途二级名称");
            Colomnlist.add("违法行为编号");
            Colomnlist.add("违法行为_实际用途名称");
            Colomnlist.add("是否“基金项目”");
            Colomnlist.add("是否因防疫和防治重大疫情需要建设的医疗卫生设施");
            Colomnlist.add("是否保障性安居住房");
            Colomnlist.add("违法行为_项目类型名称");
            Colomnlist.add("违法_项目名称");
            Colomnlist.add("违法_项目主体");
            Colomnlist.add("违法_立项批准机关");
            Colomnlist.add("违法_立项批准文号");
            Colomnlist.add("是否新增乱占耕地建房");
            Colomnlist.add("是否挖湖造景");
            Colomnlist.add("是否大棚房");
            Colomnlist.add("修改时间");
            Colomnlist.add("批文个数");
            Colomnlist.add("农用地转用批准文号");
            Colomnlist.add("农用地转用批文来源");
            Colomnlist.add("农用地转用批准面积");
            Colomnlist.add("农用地转用批准机关");
            Colomnlist.add("农用地转用批准日期");
            Colomnlist.add("增减挂钩批准文号");
            Colomnlist.add("增减挂钩批文来源");
            Colomnlist.add("增减挂钩批准面积");
            Colomnlist.add("增减挂钩批准机关");
            Colomnlist.add("增减挂钩批准日期");
            Colomnlist.add("工矿废弃地批准文号");
            Colomnlist.add("工矿废弃地批文来源");
            Colomnlist.add("工矿废弃地批准面积");
            Colomnlist.add("工矿废弃地批准机关");
            Colomnlist.add("工矿废弃地批准日期");
            Colomnlist.add("不动产权证书批准文号");
            Colomnlist.add("不动产权证书批文来源");
            Colomnlist.add("不动产权证书批准面积");
            Colomnlist.add("不动产权证书批准机关");
            Colomnlist.add("不动产权证书批准日期");
            Colomnlist.add("设施农用地批准文号");
            Colomnlist.add("设施农用地批文来源");
            Colomnlist.add("设施农用地批准面积");
            Colomnlist.add("设施农用地批准机关");
            Colomnlist.add("设施农用地批准日期");
            Colomnlist.add("土地整治验收批准文号");
            Colomnlist.add("土地整治验收批文来源");
            Colomnlist.add("土地整治验收批准面积");
            Colomnlist.add("土地整治验收批准机关");
            Colomnlist.add("土地整治验收批准日期");
            Colomnlist.add("其他批准文号");
            Colomnlist.add("其他批文来源");
            Colomnlist.add("其他批准面积");
            Colomnlist.add("其他批准机关");
            Colomnlist.add("其他批准日期");
            Colomnlist.add("临时用地批准文号");
            Colomnlist.add("临时用地批文来源");
            Colomnlist.add("临时用地批准面积");
            Colomnlist.add("临时用地批准机关");
            Colomnlist.add("临时用地批准日期");
            Colomnlist.add("土地供应批准文号");
            Colomnlist.add("土地供应批文来源");
            Colomnlist.add("土地供应批准面积");
            Colomnlist.add("土地供应批准机关");
            Colomnlist.add("土地供应批准日期");
            Colomnlist.add("先行用地批准文号");
            Colomnlist.add("先行用地批文来源");
            Colomnlist.add("先行用地批准面积");
            Colomnlist.add("先行用地批准机关");
            Colomnlist.add("先行用地批准日期");
            Colomnlist.add("预审批准文号");
            Colomnlist.add("预审批文来源");
            Colomnlist.add("预审批准面积");
            Colomnlist.add("预审批准机关");
            Colomnlist.add("预审批准日期");
            Colomnlist.add("其他判定依据说明");
            Colomnlist.add("地块标识码");
            Colomnlist.add("监测面积");
            Colomnlist.add("往期图斑编号");
            Colomnlist.add("备注");
            Colomnlist.add("监测图斑现状耕地面积");
            Colomnlist.add("监测图斑现状农用地总面积");
            Colomnlist.add("地类认定建设用地面积");
            Colomnlist.add("地类认定未利用地面积");
            Colomnlist.add("占基本农田面积");
            Colomnlist.add("面积占比最大的三调县级行政区代码");
            Colomnlist.add("面积占比最大的三调县级行政区名称");
            Colomnlist.add("面积占比最大的乡镇级行政区代码");
            Colomnlist.add("面积占比最大的乡镇级行政区名称");
            Colomnlist.add("面积占比最大的村级行政区代码");
            Colomnlist.add("面积占比最大的村级行政区名称");
            Colomnlist.add("农转用建设用地项目图斑2010至今");
            Colomnlist.add("土地整治验收项目");
            Colomnlist.add("增减挂钩项目拆旧区");
            Colomnlist.add("增减挂钩项目建新区");
            Colomnlist.add("工矿废弃地复垦项目");
            Colomnlist.add("未利用地开发项目");
            Colomnlist.add("供地信息");
            Colomnlist.add("预审项目信息");
            Colomnlist.add("设施农用地信息");
            Colomnlist.add("先行用地信息");
            Colomnlist.add("矿权信息");
            Colomnlist.add("其他矿权信息");
            Colomnlist.add("涉矿类型");
            Colomnlist.add("套上矿权面积");
            Colomnlist.add("越界面积");
            Colomnlist.add("自然保护区信息");
            Colomnlist.add("有手续卫片地类认定耕地面积");
            Colomnlist.add("有手续卫片地类认定农用地面积");
            Colomnlist.add("有手续卫片地类认定建设用地面积");
            Colomnlist.add("有手续卫片地类认定未利用地面积");
            Colomnlist.add("有手续卫片地类认定基本农田面积");
            Colomnlist.add("无手续卫片地类认定耕地面积");
            Colomnlist.add("无手续卫片地类认定农用地面积");
            Colomnlist.add("无手续卫片地类认定建设用地面积");
            Colomnlist.add("无手续卫片地类认定未利用地面积");
            Colomnlist.add("无手续卫片地类认定水田面积");
            Colomnlist.add("无手续卫片地类认定基本农田面积");
            Colomnlist.add("是否分割地块");
            Colomnlist.add("涉矿标记");
            Colomnlist.add("合法_是否为边角细缝或线性工程等");
            Colomnlist.add("合法_对监管平台未套合部分是否提供举证材料");
            Colomnlist.add("合法_填报文号与扫描件是否一致");
            Colomnlist.add("合法_提供证明文件是否可作为新增建设用地判定依据");
            Colomnlist.add("合法_情况说明是否合理");
            Colomnlist.add("合法_是否提供自录批文矢量数据");
            Colomnlist.add("合法_备注");
            Colomnlist.add("违法_是否为边角细缝或线性工程等");
            Colomnlist.add("违法_对监管平台未套合部分是否提供举证材料");
            Colomnlist.add("违法_填报文号与扫描件是否一致");
            Colomnlist.add("违法_提供证明文件是否可作为新增建设用地判定依据");
            Colomnlist.add("违法_情况说明是否合理");
            Colomnlist.add("违法_是否提供自录批文矢量数据");
            Colomnlist.add("违法_设施农用地批准时间");
            Colomnlist.add("违法_是否提供乡镇人民政府出具属于设施农业用地用途的证明材料");
            Colomnlist.add("违法_临时用地批文来源");
            Colomnlist.add("违法_批准文号与扫描件合理性");
            Colomnlist.add("违法_矢量范围套合情况");
            Colomnlist.add("违法_拆除到位");
            Colomnlist.add("违法_复耕到位");
            Colomnlist.add("违法_补办手续类型");
            Colomnlist.add("违法_备注");
            Colomnlist.add("其他_设施农用地批准时间");
            Colomnlist.add("其他_临时用地批文来源");
            Colomnlist.add("其他_批准文号与扫描件合理性");
            Colomnlist.add("其他_矢量范围套合情况");
            Colomnlist.add("其他_是否提供县级进出平衡材料");
            Colomnlist.add("其他_是否为高标准农田内非连通农道");
            Colomnlist.add("其他_备案文件是否合理");
            Colomnlist.add("其他_是否提供设施农用地备案材料");
            Colomnlist.add("其他_设施农用地备案材料批准时间");
            Colomnlist.add("其他_是否提供备案材料");
            Colomnlist.add("其他_批准时间");
            Colomnlist.add("其他_是否提供乡镇人民政府出具属于设施农业用地用途的证明材料");
            Colomnlist.add("其他_是否提供临时用地批复");
            Colomnlist.add("其他_是否符合实地未变化标准");
            Colomnlist.add("其他_情况说明是否合理");
            Colomnlist.add("其他_是否符合实地未变化认定标准");
            Colomnlist.add("其他_是否提供先行用地手续");
            Colomnlist.add("其他_备注");
            Colomnlist.add("合法_批准文号");
            Colomnlist.add("合法_批准项目名称");
            Colomnlist.add("合法_批准时间");
            Colomnlist.add("合法_批准占用耕地面积");
            Colomnlist.add("合法_批准占用耕地面积单位");
            Colomnlist.add("合法_自录批文材料名称");
            Colomnlist.add("合法_自录批文类型");
            Colomnlist.add("违法_批准文号");
            Colomnlist.add("违法_批准项目名称");
            Colomnlist.add("违法_批准时间");
            Colomnlist.add("违法_自录批文类型");
            Colomnlist.add("违法_批准占用耕地面积");
            Colomnlist.add("违法_批准占用耕地面积单位");
            Colomnlist.add("违法_批准文号");
            Colomnlist.add("违法_批准项目名称");
            Colomnlist.add("违法_批准时间");
            Colomnlist.add("违法_自录批文材料名称");
            Colomnlist.add("其他_批准文号");
            Colomnlist.add("其他_批准项目名称");
            Colomnlist.add("其他_批准时间");
            Colomnlist.add("其他_是否提供先行用地手续材料名称");
            Colomnlist.add("其他_是否提供先行用地手续批复时间");
            Colomnlist.add("其他_提供备案文件时间");
            Colomnlist.add("其他_材料名称");
            Colomnlist.add("最终结果类别");
            Colomnlist.add("监理评分");
            Colomnlist.add("单位_审核人");
            Colomnlist.add("单位_审核人姓名");
            Colomnlist.add("单位_提交时间");
            Colomnlist.add("监理_审核人");
            Colomnlist.add("监理_审核人姓名");
            Colomnlist.add("监理_提交时间");
            Colomnlist.add("结果备注");
            List<Map<String, Object>> list = wpzfNdhcTjInfoServiceImpl.getJctjxxb(parm);
            rest = excel.export(response, category, list, Colomnlist, tempath);
            if (rest.contains("error")) {
                msg = "导出失败";
            } else {
                msg = "导出成功";
            }
            return AjaxResult.success(msg, rest);
        } catch (Exception e) {
            e.printStackTrace();
            msg = "导出失败";
        }
        return AjaxResult.error(msg, -1);
    }


    //todo 全流程图斑查询
    //pch
    @RequestMapping(value = "/getBatchNumberList", method = RequestMethod.POST)
    public AjaxResult getBatchNumberList(@RequestBody Map<String, Object> param) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getBatchNumberList(param);
        return AjaxResult.success("获取批次号", rest);
    }

    //筛选条件查询接口（省、县）
    @RequestMapping(value = "/getProvinceList", method = RequestMethod.POST)
    public AjaxResult getProvinceList(@RequestBody Map<String, Object> param) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getProvinceList(param);
        return AjaxResult.success("获取省", rest);
    }

    @RequestMapping(value = "/getCountyList", method = RequestMethod.POST)
    public AjaxResult getCountyList(@RequestBody Map<String, Object> param) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.getCountyList(param);
        return AjaxResult.success("获取县", rest);
    }

    //地块列表
    @RequestMapping(value = "/queryDkTaskList", method = RequestMethod.POST)
    public AjaxResult queryDkTaskList(@RequestBody Map<String, Object> param) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.queryDkTaskList(param);
        Integer cnt = wpzfNdhcTjInfoServiceImpl.queryDkTaskListCount(param);
        return AjaxResult.success("地块列表", rest, cnt);
    }

    //todo 全流程图斑管理 辛
    //地块列表
    @RequestMapping(value = "/queryDkTask", method = RequestMethod.POST)
    public AjaxResult queryDkTask(@RequestBody Map<String, Object> param) {
        List<Map<String, Object>> rest = wpzfNdhcTjInfoServiceImpl.queryDkTask(param);
        Integer cnt = wpzfNdhcTjInfoServiceImpl.queryDkTaskCount(param);
        return AjaxResult.success("地块列表", rest, cnt);
    }


}
